# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 17、基于加密接口的测试用例设计.py
@time : 2022/6/26 8:36
"""

"""
环境准备：
    1.对响应的加密接口。对它发起一个 get 请求后，得到一个加密过后的响应信息。
    2.准备一个加密文件   ->  https://ceshiren.com/t/topic/2094
    使用 base64 对 demo.json 加密，得到demo1.txt文件。新建demo文件，放该目录下  
      {
      ”topics“:
        {
        "orange":"movie",
        "shool":"testing-studio",
        "president":"seveniruby"
        }   
      }
    3.使用 python 命令在有加密文件的所在目录启动一个服务 python -m http.server 9999
    4.访问该网址
"""

"""
原理： 
    在得到响应后对响应做解密处理
        1.如果知道使用那个通用加密算法，可自行解决
        2.如果不了解对应的加密算法的话，可以让研发提供解密的 lib
        3.可以让加密方提供解析服务，这样算法仍然是保密的
"""
# 实战练习 ：
# 1.调用 python 自带的 base64，直接对返回的响应做解密，即可得到解密后的响应
# 2.封装对不不同算法的处理方法
import requests
import base64
import json


def test_encode():
    url = "http://127.0.0.1:9999/demo1.txt"
    r = requests.get(url)
    print(r.text)
    # base64算法 解密
    res = json.loads(base64.b16decode(r.content))
    # 结果 ： {'topics'：{'orange'：'movie','shool':'testing-studio','president':'seveniruby'}}
    print(res)


class ApiRequest:
    req_data = {
        "method": "get",
        "url": "http://127.0.0.1:9999/demo1.txt",
        "headers": None,
        "encoding": "base64"
    }

    def send(self, data: dict):
        res = requests.request(data['method'], data['url'], headers=data['headers'])
        if data['encoding'] == 'base64':
            return json.loads(base64.b16decode(res.content))
        # 把加密后的响应值发给第三方服务，让第三方服务做解密然后返回解密信息
        elif data['encoding'] == 'private':
            return requests.post("url", data=res.content)


if __name__ == '__main__':
    req_data = {
        "method": "get",
        "url": "http://127.0.0.1:9999/demo1.txt",
        "headers": None,
        "encoding": "base64"
    }

    a = ApiRequest()
    a.send(req_data)
